﻿/***************************************************COPYRIGHT***************************************
* Copyright (c) 2008, Whiteboard-IT
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that 
* the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following 
 * disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided with the distribution.
*
* Neither the name of Whiteboard-IT, LLC nor the names of its contributors may be used to endorse or promote 
 * products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
*****************************************************************************************************************/
using System;
using System.Reflection;
using Boo.Lang.Compiler;
using Mite.Configuration;
using Mite.DSL;
using Mite.MsSql;
using Rhino.DSL;

namespace Mite.Client
{
	public class SettingsDslEngine : DslEngine
	{
		public SettingsDslEngine()
		{
			Storage = new FileSystemDslEngineStorage();
		}

		protected override void CustomizeCompiler(BooCompiler compiler, CompilerPipeline pipeline, string[] urls)
		{
			Type baseClass = typeof (MiteSettings);

			compiler.Parameters.References.Add(Assembly.GetAssembly(typeof (MsSqlAdapter)));
			compiler.Parameters.Ducky = true;
			pipeline.Insert(1,
			                new ImplicitBaseClassCompilerStep(baseClass, "Build", "Mite.Client", "System.Reflection",
			                                                  "Mite.MsSql"));
			pipeline.Insert(1, new StartsWithLowerNamingConventionsToStartsWithUpperCompilerStep(baseClass));
			pipeline.Insert(1, new UnderscorNamingConventionsToPascalCaseCompilerStep());
		}
	}
}